<?php
class MenuPublicoKakoon extends Datos
{
    public $menupublicokakoon_id;
    public $titulo;
    public $url;
    public $posicion;
    public $inicio;

    const TABLA             = "menuspublicoskakoon";
    const CLAVE_PRIMARIA    = "menupublicokakoon_id";

    public function esInicio()
    {
        return (ConstantesKakoon::SI == $this->getPropiedad("inicio"));
    }

    public function registraPosicion()
    {
        $sql = "SELECT posicion FROM ". self::TABLA ." ORDER BY posicion DESC LIMIT 1";

        $posicion  = 1;
        $resultado = $this->accesoBD->queryBDCampo ($sql);

        if ($resultado > 0)
        {
            $posicion = ($resultado + 1);
        }

        $this->setPropiedad("posicion", $posicion);
    }

    public function sube()
    {
        $sql = "SELECT ". self::CLAVE_PRIMARIA .",posicion FROM ". self::TABLA;
        $sql.= " WHERE posicion > ". $this->getPropiedad("posicion") ." ORDER BY posicion ASC LIMIT 1";

        $resultado = $this->accesoBD->queryBDObjeto ($sql);
         
        if ($resultado instanceof ObjetoResultadoAccesoBD)
        {
            $otroMenuPublico = new MenuPublicoKakoon($this->getAccesoBD(), $resultado->getValor(self::CLAVE_PRIMARIA));
            $otroMenuPublico->setPropiedad ("posicion", $this->getPropiedad("posicion"));
            $otroMenuPublico->consolida();

            $this->setPropiedad("posicion", $resultado->getValor("posicion"));
            $this->consolida();
        }
    }

    public function baja()
    {
        $sql = "SELECT ". self::CLAVE_PRIMARIA .",posicion FROM ". self::TABLA;
        $sql.= " WHERE posicion < ". $this->getPropiedad("posicion") ." ORDER BY posicion DESC LIMIT 1";
         
        $resultado = $this->accesoBD->queryBDObjeto ($sql);

        if ($resultado instanceof ObjetoResultadoAccesoBD)
        {
            $otroMenuPublico = new MenuPublicoKakoon($this->getAccesoBD(), $resultado->getValor(self::CLAVE_PRIMARIA));
            $otroMenuPublico->setPropiedad ("posicion", $this->getPropiedad("posicion"));
            $otroMenuPublico->consolida();

            $this->setPropiedad("posicion", $resultado->getValor("posicion"));
            $this->consolida();
        }
    }

    public function registraTipos()
    {
        $valores = array();
        $valores[ConstantesKakoon::SI] = ConstantesKakoon::SI;
        $valores[ConstantesKakoon::NO] = ConstantesKakoon::NO;
         
        $this->setTipo("titulo",      new TipoDatoLiteral(100));
        $this->setTipo("url",         new TipoDatoLiteral(100));
        $this->setTipo("posicion",    new TipoDatoEntero());
        $this->setTipo("inicio",      new TipoDatoSeleccion($valores));
    }

    public function registraEsenciales()
    {
        $this->setEsencial("titulo");
        $this->setEsencial("url");
        $this->setEsencial("posicion");
        $this->setEsencial("inicio");
    }

    public function registraSoloLectura()
    {
        $this->setSoloLectura("url");
    }

    public function registraUnicos()
    {
        $this->setUnico("titulo");
    }

    public function registraMetas()
    {
        $this->setInfo("titulo",      "Titulo",   "Titulo del menu. Este titulo es el Titulo que aparece en la parte publica");
        $this->setInfo("url",         "Url",      "URL a la que se accede a traves de este menu");
        $this->setInfo("posicion",    "Posicion", "Posicion en la que aparece este menu");
        $this->setInfo("inicio",      "Inicio",   "Indica si el menu es el que se muestra como pagina de inicio");
    }

    public function getTabla()
    {
        return self::TABLA;
    }

    public function getClavePrimaria()
    {
        return self::CLAVE_PRIMARIA;
    }
}
?>